package Jastermind;

import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import Various.SerialisationXML;

public class Player {
    private static final String fileName="player.xml";
    private String name;
    private ArrayList<Color> listColors;
    private Color bienPlace;
    private Color malPlace;
    private int combinaisonSize;
    private int nbAttempts;
    private int nbOccurence;
    private int gameWon;
    private int gameLost;

    public Player(String name){
        this.name=name;
        this.createListeColors();
        this.combinaisonSize=4;
        this.nbAttempts=10;
        this.nbOccurence=1;
        this.gameWon=0;
        this.gameLost=0;
        this.bienPlace=Color.RED;
        this.malPlace=Color.BLACK;

    }
    private void createListeColors(){
        listColors=new ArrayList<Color>();
        listColors.add(Color.GREEN);
        listColors.add(Color.BLUE);
        listColors.add(Color.YELLOW);
        listColors.add(Color.MAGENTA);
        listColors.add(Color.PINK);
        listColors.add(Color.CYAN);
    }

    public int getCombinaisonSize() {
        return combinaisonSize;
    }

    public void setCombinaisonSize(int combinaisonSize) {
        this.combinaisonSize = combinaisonSize;
    }

    public int getGameLost() {
        return gameLost;
    }

    public void setGameLost(int gameLost) {
        this.gameLost = gameLost;
    }
    public int getGameWon() {
        return gameWon;
    }

    public void setGameWon(int gameWon) {
        this.gameWon = gameWon;
    }

    public ArrayList<Color> getListColors() {
        return listColors;
    }

    public void setListeColors(ArrayList<Color> listeColors) {
        this.listColors = listeColors;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNbEssais() {
        return nbAttempts;
    }

    public void setNbEssais(int nbEssais) {
        this.nbAttempts = nbEssais;
    }

    public int getNbOccurence() {
        return nbOccurence;
    }

    public void setNbOccurence(int nbOccurence) {
        this.nbOccurence = nbOccurence;
    }

    public Color getBienPlace() {
        return bienPlace;
    }

    public void setBienPlace(Color bienPlace) {
        this.bienPlace = bienPlace;
    }

    public Color getMalPlace() {
        return malPlace;
    }

    public void setMalPlace(Color malPlace) {
        this.malPlace = malPlace;
    }

    public static String getFileName() {
        return Player.fileName;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Player other = (Player) obj;
        if ((this.name == null) ? (other.name != null) : !this.name.equalsIgnoreCase(other.name)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 23 * hash + (this.name != null ? this.name.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return this.name;
    }

      //Ajouter un joueur
    public static void addJoueur() {
        String nomJoueur = JOptionPane.showInputDialog("Entrer votre nom de joueur ");
        Player joueur = new Player(nomJoueur);
        if (nomJoueur != null) {
            if (!Data.getUniqueInstance().getListPlayers().contains(joueur)) {
                Data.getUniqueInstance().getListPlayers().add(joueur);
                SerialisationXML.saveToXml(Player.getFileName(), Data.getUniqueInstance().getListPlayers());
                JOptionPane.showMessageDialog(null, "Le joueur " + nomJoueur + " a été ajouté avec succès");
           }
            else {
                JOptionPane.showMessageDialog(null, "Le joueur " + nomJoueur + " existe déjà");
            }
        }
        else {
            JOptionPane.showMessageDialog(null, "Vous devez saisir un nom de joueur");
        }
    }
    public void deleteJoueur(){
        JOptionPane.showMessageDialog(null,"Le joueur "+this.name+" a été supprimé");
        Data.getUniqueInstance().getListPlayers().remove(this);
    }
}
